/*
 * @lc app=leetcode.cn id=136 lang=cpp
 *
 * [136] 只出现一次的数字
 */
#include "include.h"
// @lc code=start
class Solution {
public:
    int singleNumber(vector<int>& nums) {
        // unordered_map<int, int> hashTable;
        // for (auto& item : nums){
        //     if (hashTable.find(item) != hashTable.end()){
        //         hashTable[item] += 1;
        //     }else{
        //         hashTable[item] = 1;
        //     }
        // }
        // for (auto& pair : hashTable){
        //     if (pair.second == 1){
        //         return pair.first;
        //     }
        // }
        // return 0;

        //  x ∧ x = 0 和 x ∧ 0 = x
        // 出现两次的所有数字按位异或的结果是 0，
        // 0 与出现一次的数字异或可以得到这个数字本身
        int ans = 0;
        for (const int & num: nums) {
            ans ^= num;
        }
        return ans;
    }
};
// @lc code=end

